import axios from 'axios'
import { MessageBox, Message } from 'element-ui'
import store from '@/store/index'
import { getToken } from '@/utils/auth';

// 创建axios实例
const service = axios.create({
    baseURL: '/api', //URL地址   环境变量文件 .env.development
    //baseURL: process.env.VUE_APP_BASE_API, //URL地址   环境变量文件 .env.development
    timeout: 5000 ,//超时
    // withCredentials: true,  //跨域时若要发生cookie,需要设置该选项
})

// 请求拦截器
service.interceptors.request.use(
    config => {
        if(store.getters.token){
            // 设置令牌请求头
            config.headers['Authorization'] = getToken()
        }
      return config
    },
    error => {
        return Promise.reject(error)
    }
)

// 响应拦截
service.interceptors.response.use(
    // 通过自定义code 判定响应状态 也可以通过HTTP状态码判断
    // response =>{
    //     const res = response.data
    //     console.log(res)
    //     // code 不为0 则判断为一个错误
    //     if(res.code !== 0){
    //         Message({
    //             message: res.msg || "Error",
    //             type: 'error',
    //             duration: 5*1000
    //         })
    //
    //
    //         // 假设 10008 非法令牌  10012 其他客户端已经登陆
    //         if(res.code === 10008 || res.code === 10012){
    //             // 重新登陆
    //             MessageBox.confirm(
    //                 '登陆状态异常,请重新登陆',
    //                 "确认登陆信息",
    //                 {
    //                     confirmButtonText: '重新登陆',
    //                     cancelButtonText: '取消',
    //                     type: 'warning'
    //                 }
    //             ).then(()=>{
    //                 store.dispatch('user/resetToken')
    //                     .then(()=>{
    //                         location.reload()
    //                     })
    //             })
    //         }
    //
    //         // return Promise.reject(new Error(res.message || 'Error'));
    //
    //     }else{
    //         return res;
    //     }
    // },
  response => {
    if (response.data) {
      const res = response.data
      console.log(res)
      if (res.code) {
        return res
      }
      if (res.result !== 200) {
        if (res.result === 300) {
          Message({
            message: res.errorMsg || '数据已存在！',
            type: 'error',
            duration: 5 * 1000
          })
        }
        if (res.result === 301) {
          Message({
            message: res.errorMsg || '账号不存在！',
            type: 'error',
            duration: 5 * 1000
          })
        }
        if (res.result === 401) {
          Message({
            message: res.errorMsg || '您没有登录！',
            type: 'error',
            duration: 5 * 1000
          })
        }
        if (res.result === 402) {
          Message({
            message: res.errorMsg || '发生异常！',
            type: 'error',
            duration: 5 * 1000
          })
        }
        if (res.result === 403) {
          Message({
            message: res.errorMsg || '系统错误！',
            type: 'error',
            duration: 5 * 1000
          })
        }
        if (res.result === 406) {
          Message({
            message: res.errorMsg || '参数错误！',
            type: 'error',
            duration: 5 * 1000
          })
        }
        if (res.result === 407) {
          Message({
            message: res.errorMsg || '无权进入！',
            type: 'error',
            duration: 5 * 1000
          })
        }
        if (res.result === 445) {
          Message({
            message: res.errorMsg || '帐号不可用！',
            type: 'error',
            duration: 5 * 1000
          })
        }
        if (res.result === 506) {
          Message({
            message: res.message || '密码错误',
            type: 'error',
            duration: 5 * 1000
          })
        }
        if (res.result === 411 || res.result === 412) {
          // to re-login
          MessageBox.confirm('Token不存在或者已过期，请重新登录！', 'Confirm logout', {
            confirmButtonText: '重新登陆',
            cancelButtonText: '取消',
            type: 'warning'
          }).then(() => {
            store.dispatch('user/resetToken').then(() => {
              location.reload()
            })
          })
        }
        return Promise.reject(res.errorMsg)
      } else {
        return res
      }
    } else {
      return response
    }
  },
    error =>{
        // Message({
        //     message: error.message,
        //     type: 'error',
        //     duration: 5*1000
        // })
      return Promise.reject(error)
    }
)

export default service;
